﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Root.Reports;
using System.Drawing;

public partial class Reportes_FrResultadoReporte : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        if (Session["nit"] != null)
            Response.Redirect("/SUEWebSite/Error.aspx");
        else if (Session["nomUsr"] != null)
        {
            List<String> Permisos = (List<String>)Session["Permisos"];

            if (!Permisos.Contains(System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath)))
                Response.Redirect("/SUEWebSite/Error.aspx");
            else
            {
                try
                {
                    Habilitar(Convert.ToInt32(Request.QueryString["Reporte"]));
                }
                catch
                {
                    Response.Redirect("FrListaReportes.aspx");
                }

            }   

        }
        else Response.Redirect("/SUEWebSite/Principal.aspx");

        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        Literal2.Text = "";
    }

    /// <summary>
    /// Construye un tabla HTML con la información de pracicantes
    /// permite filtrar o no la información, verificando si el checkbox esta 
    /// marcado
    /// </summary>
    /// <param name="ProgAcad">(string) Filtro porgrama académico</param>
    private void ConstruirReporte1(string ProgAcad)
    {
        int cont = 0;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxProgramaAcademico.Checked == true)
            ProgAcad = "";
        DataTable dt = reporte.GenerarReporte1(ProgAcad);
        Literal1.Text = "<div align ='center'><table style='width:90%;'>";
        Literal1.Text += "<td><b>Código</b></td> <td><b>Nombre</b></td> <td><b>Apellido</b></td> <td><b>Programa</b></td> <td><b>Departamento</b></td> <td><b>Municipio</b></td> <td><b>Télefono</b></td> <td><b>Celular</b></td> <td><b>Email</b></td>";
        foreach (DataRow dtr in dt.Rows)
        {
            Literal1.Text += "<tr><td>" + dt.Rows[cont]["codigo"] + "</td> <td>" + dt.Rows[cont]["nombre"] + "</td> <td>" + dt.Rows[cont]["apellido"] + "</td> <td>" + dt.Rows[cont]["ProgramaAcademico_nombreProgramaAcademico"] + "</td>"; 
            Literal1.Text += "<td>" + dt.Rows[cont]["departamentoHogar"] + "</td> <td>" + dt.Rows[cont]["municipioHogar"] + "</td> <td>" + dt.Rows[cont]["telefonoHogar"] + "</td>";
            Literal1.Text += "<td>" + dt.Rows[cont]["telefonoCelular"] + "</td> <td>" + dt.Rows[cont]["email"] + "</td></tr>";
            cont++;
        }
        Literal1.Text += "</table></div>";
        if (cont == 0)
          Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Genera un pdf con la información de un datatable, recibe como parametro 
    /// el programa académico para filtrar la información, se usa la libreria 
    /// Report.dll, se construye la estructura del documento desde el código
    /// </summary>
    /// <param name="ProgAcad">(string) Programa académico</param>
    private void Reporte1APDF(string ProgAcad)
    {
        int cont = 0, i = 0, datosXPagina = 12, NoPagina = 1;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxProgramaAcademico.Checked == true)
            ProgAcad = "";
        DataTable dt = reporte.GenerarReporte1(ProgAcad);
        // Obejto reporte
        Report report = new Report(new PdfFormatter());
        // Crea la primera página del PDF
        Root.Reports.Page page = new Root.Reports.Page(report);
        // propiedades de texto color y tamano
        FontDef fd = new FontDef(report, "Helvetica");
        FontProp fp = new FontPropMM(fd, 2);
        FontProp fp_Title = new FontPropMM(fd, 3);
        fp_Title.bBold = true;
        fp_Title.color = Color.Gray;
        FontProp fp_Col = new FontPropMM(fd, 2);
        fp_Col.bBold = true;
        fp_Col.color = Color.Blue;
        // propiedades de texto color y tamano
                page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
        // posición en y inicial
        int ry = 20;
        foreach (DataRow dtr in dt.Rows)
        {
            if (cont % datosXPagina == 0)
            {
                // crea una nueva página si el contador del número de datos es divisible por el numero de datos a mostrar (datosXPagina)
                if (i != 0)
                {
                    page = new Root.Reports.Page(report);
                    NoPagina++;
                    page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
                }
                i = 0;
                ry = 20;
                page.AddMM(2, 10, new RepString(fp_Title, LabelReporte.Text + " " + ProgAcad));
                page.AddMM(170, 10, new RepDateTime(fp, DateTime.Now));
            }
            
            page.AddMM(10, ry, new RepString(fp_Col, "Código"));
            page.AddMM(21, ry, new RepString(fp, dt.Rows[cont]["codigo"].ToString()));
            page.AddMM(45, ry, new RepString(fp_Col, "Cédula"));
            page.AddMM(56, ry, new RepString(fp, dt.Rows[cont]["cedula"].ToString()));
            page.AddMM(75, ry, new RepString(fp_Col, "Nombre"));
            page.AddMM(87, ry, new RepString(fp, dt.Rows[cont]["nombre"].ToString())); //15
            page.AddMM(115, ry, new RepString(fp_Col, "Apellido"));
            page.AddMM(127, ry, new RepString(fp, dt.Rows[cont]["apellido"].ToString())); //25
            page.AddMM(160, ry, new RepString(fp_Col, "Programa"));
            page.AddMM(175, ry, new RepString(fp, dt.Rows[cont]["ProgramaAcademico_nombreProgramaAcademico"].ToString()));
            ry += 5;
            page.AddMM(10, ry, new RepString(fp_Col, "Departamento/Municipio"));
            page.AddMM(44, ry, new RepString(fp, dt.Rows[cont]["departamentoHogar"].ToString() + "/" + dt.Rows[cont]["municipioHogar"].ToString()));
            
            //page.AddMM(74, ry, new RepString(fp, dt.Rows[cont]["municipioHogar"].ToString()));
            page.AddMM(115, ry, new RepString(fp_Col, "Dirección"));
            page.AddMM(129, ry, new RepString(fp, dt.Rows[cont]["direccionActual"].ToString()));
            ry += 5;
            page.AddMM(10, ry, new RepString(fp_Col, "Télefono"));
            page.AddMM(23, ry, new RepString(fp, dt.Rows[cont]["telefonoHogar"].ToString()));
            page.AddMM(45, ry, new RepString(fp_Col, "Celular"));
            page.AddMM(56, ry, new RepString(fp, dt.Rows[cont]["telefonoCelular"].ToString()));
            page.AddMM(115, ry, new RepString(fp_Col, "Email"));
            page.AddMM(127, ry, new RepString(fp, dt.Rows[cont]["email"].ToString()));
            ry = 40 + (i * 20);
            cont++;
            i++;
        }
        if (dt.Rows.Count > 0)
            RT.ResponsePDF(report, this);
        else
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Construye un tabla HTML con la información de convenios
    /// permite filtrar o no la información, verificando si el checkbox esta 
    /// marcado
    /// </summary>
    /// <param name="estadoConvenio">(string) Filtro estado Convenio</param>
    private void ConstruirReporte2(string estadoConvenio)
    {
        int cont = 0;
        string legalizado = "";
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxEstadoConvenio.Checked == true)
            estadoConvenio = "";
        DataTable dt = reporte.GenerarReporte2(estadoConvenio);
        Literal1.Text = "<div align ='center'><table style='width:90%;'>";
        Literal1.Text += "<td><b>Empresa</b></td> <td><b>Estado</b></td> <td><b>Tipo</b></td> <td><b>Id. Convenio</b></td> <td><b>Fecha Ini.</b></td><td><b>Fecha Ven.</b></td> <td><b>Fecha Fir.</b></td> <td><b>Sueldo</b></td> <td><b>Duración</b></td> <td><b>Legalizado</b></td>";
        foreach (DataRow dtr in dt.Rows)
        {
            Empresa emp = new Empresa();
            emp = emp.BuscarUnicaEmp(dt.Rows[cont]["Empresa_nit"].ToString());
            if (dt.Rows[cont]["Legalizado"].ToString() == "1")
                legalizado = "Si";
            else
                legalizado = "No";
            Literal1.Text += "<tr><td>" + emp.ObtNombre() + "</td> <td>" + dt.Rows[cont]["estadoConvenio"] + "</td> <td>" + dt.Rows[cont]["tipoConvenio"] + "</td>";
            Literal1.Text += "<td>" + dt.Rows[cont]["nombreConvenio"] + "</td> <td>" + dt.Rows[cont]["fechaInicio"] + "</td> <td>" + dt.Rows[cont]["fechaVencimiento"] + "</td>";
            Literal1.Text += "<td>" + dt.Rows[cont]["fechaFirma"] + "</td> <td>" + dt.Rows[cont]["sueldoConvenido"] + "</td> <td>" + dt.Rows[cont]["tiempoDuracion"] + "</td> <td>" + legalizado + "</td> </tr>";
            cont++;
        }
        Literal1.Text += "</table></div>";
        if (cont == 0)
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Genera un pdf con la información de un datatable, recibe como parametro 
    /// el estado del convenio para filtrar la información, se usa la libreria 
    /// Report.dll, se construye la estructura del documento desde el código
    /// </summary>
    /// <param name="estadoConvenio">(string) estado Convenio</param>
    private void Reporte2APDF(string estadoConvenio)
    {
        int cont = 0, i = 0, datosXPagina = 46, NoPagina = 1;
        string nombreEmpresa,idConvenio,legalizado;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxEstadoConvenio.Checked == true)
            estadoConvenio = "";
        DataTable dt = reporte.GenerarReporte2(estadoConvenio);
        // Obejto reporte
        Report report = new Report(new PdfFormatter());
        // Crea la primera página del PDF
        Root.Reports.Page page = new Root.Reports.Page(report);
        // propiedades de texto color y tamano
        FontDef fd = new FontDef(report, "Helvetica");
        FontProp fp = new FontPropMM(fd, 2);
        FontProp fp_Title = new FontPropMM(fd, 3);
        fp_Title.bBold = true;
        fp_Title.color = Color.Gray;
        FontProp fp_Col = new FontPropMM(fd, 2);
        fp_Col.bBold = true;
        fp_Col.color = Color.Blue;
        // propiedades de texto color y tamano
        // Titulo y fecha del reporte
         page.AddMM(10, 15, new RepString(fp, "Formato Fecha (dd/mm/aaa)"));
        page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
        // posición en y inicial
        int ry = 25;
        foreach (DataRow dtr in dt.Rows)
        {
            if (cont % datosXPagina == 0)
            {
                // crea una nueva página si el contador del número de datos es divisible por el numero de datos a mostrar (datosXPagina)
                if (i != 0)
                {
                    page = new Root.Reports.Page(report);
                    NoPagina++;
                    page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
                }
                i = 0;
                ry = 25;
                page.AddMM(10, 10, new RepString(fp_Title, LabelReporte.Text + " " + estadoConvenio));
                page.AddMM(170, 10, new RepDateTime(fp, DateTime.Now));
                page.AddMM(10, 20, new RepString(fp_Col, "Empresa"));
                page.AddMM(50, 20, new RepString(fp_Col, "Id. Convenio"));
                page.AddMM(81, 20, new RepString(fp_Col, "Fecha Ini.-Fecha Ven "));
                page.AddMM(113, 20, new RepString(fp_Col, "Fecha Fir."));
                page.AddMM(130, 20, new RepString(fp_Col, "Sueldo"));
                page.AddMM(144, 20, new RepString(fp_Col, "Duración"));
                page.AddMM(158, 20, new RepString(fp_Col, "Legal"));
                page.AddMM(168, 20, new RepString(fp_Col, "Tipo"));
                if (estadoConvenio == "")
                    page.AddMM(183, 20, new RepString(fp_Col, "Estado"));
            }
            ry = 25 + (i * 5);
            Empresa emp = new Empresa();
            emp = emp.BuscarUnicaEmp(dt.Rows[cont]["Empresa_nit"].ToString());
            nombreEmpresa = emp.ObtNombre();
            if (nombreEmpresa.Length >= 26)
                nombreEmpresa = nombreEmpresa.Substring(0, 26);
            if (dt.Rows[cont]["Legalizado"].ToString() == "1")
                legalizado = "Si";
            else
                legalizado = "No";
            idConvenio = dt.Rows[cont]["nombreConvenio"].ToString();
            if(idConvenio.Length >=19)
                idConvenio = idConvenio.Substring(0, 19);
            page.AddMM(10, ry, new RepString(fp, nombreEmpresa) );
            page.AddMM(50, ry, new RepString(fp, idConvenio)); //15
            page.AddMM(81, ry, new RepString(fp, dt.Rows[cont]["fechaInicio"].ToString() + "-" + dt.Rows[cont]["fechaVencimiento"].ToString())); //25
            page.AddMM(113, ry, new RepString(fp, dt.Rows[cont]["fechaFirma"].ToString())); //25
            page.AddMM(130, ry, new RepString(fp, dt.Rows[cont]["sueldoConvenido"].ToString())); //25
            page.AddMM(144, ry, new RepString(fp, dt.Rows[cont]["tiempoDuracion"].ToString())); //15
            page.AddMM(160, ry, new RepString(fp, legalizado )); //35
            page.AddMM(168, ry, new RepString(fp, dt.Rows[cont]["tipoConvenio"].ToString())); //35
            if (estadoConvenio == "")
                page.AddMM(183, ry, new RepString(fp, dt.Rows[cont]["estadoConvenio"].ToString()));
            cont++;
            i++;
        }
        //RT.ViewPDF(report, DateTime.Now.ToShortDateString() + ".pdf");
        if (dt.Rows.Count > 0)
            RT.ResponsePDF(report, this);
        else
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Construye un tabla HTML con la información de Emprsas
    /// permite filtrar o no la información, verificando si el checkbox esta 
    /// marcado
    /// </summary>
    /// <param name="ProgAcad">(string) Filtro Sector empresarial</param>
    private void ConstruirReporte3(string sectorEmpresarial)
    {
        int cont = 0;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxSectorEmp.Checked == true)
            sectorEmpresarial = "";
        DataTable dt = reporte.GenerarReporte3(sectorEmpresarial);
        Literal1.Text = "<div align ='center'><table style='width:90%;'>";
        Literal1.Text += " <td><b>Nombre</b></td> <td><b>Sector Emp.</b></td> <td><b>Dirección</b></td><td><b>Departamento</b></td> <td><b>Municipio</b></td> <td><b>Télefono-Ext</b></td> <td><b>Email</b></td>";
        foreach (DataRow dtr in dt.Rows)
        {
            Literal1.Text += "<tr><td>" + dt.Rows[cont]["nombre"] + "</td> <td>" + dt.Rows[cont]["SectorEmpresarial_nombreSectorEmpresarial"] + "</td> <td>" + dt.Rows[cont]["direccion"] + "</td>";
            Literal1.Text += "<td>" + dt.Rows[cont]["departamento"] + "</td> <td>" + dt.Rows[cont]["municipio"] + "</td> <td>" + dt.Rows[cont]["telefono"] + "-" + dt.Rows[cont]["extensionTelefonica"] + "</td>";
            Literal1.Text += "<td>" + dt.Rows[cont]["email"] + "</td></tr>";
            cont++;
        }
        Literal1.Text += "</table></div>";
        if (cont == 0)
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }
    /// <summary>
    /// Genera un pdf con la información de un datatable, recibe como parametro 
    /// el sector empresarial para filtrar la información, se usa la libreria 
    /// Report.dll, se construye la estructura del documento desde el código
    /// </summary>
    /// <param name="sectorEmpresarial">(string) Sector empresarial</param>
    private void Reporte3APDF(string sectorEmpresarial)
    {
        int cont = 0, i = 0, datosXPagina = 46, NoPagina = 1;
        string nombreEmpresa, sector, direccion, DptoMncpio;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxSectorEmp.Checked == true)
            sectorEmpresarial = "";
        DataTable dt = reporte.GenerarReporte3(sectorEmpresarial);
        // Obejto reporte
        Report report = new Report(new PdfFormatter());
        // Crea la primera página del PDF
        Root.Reports.Page page = new Root.Reports.Page(report);
        // propiedades de texto color y tamano
        FontDef fd = new FontDef(report, "Helvetica");
        FontProp fp = new FontPropMM(fd, 2);
        FontProp fp_Title = new FontPropMM(fd, 3);
        fp_Title.bBold = true;
        fp_Title.color = Color.Gray;
        FontProp fp_Col = new FontPropMM(fd, 2);
        fp_Col.bBold = true;
        fp_Col.color = Color.Blue;
        // propiedades de texto color y tamano
        page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
        // posición en y inicial
        int ry = 25;
        foreach (DataRow dtr in dt.Rows)
        {
            if (cont % datosXPagina == 0)
            {
                // crea una nueva página si el contador del número de datos es divisible por el numero de datos a mostrar (datosXPagina)
                if (i != 0)
                {
                    page = new Root.Reports.Page(report);
                    NoPagina++;
                    page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
                }
                i = 0;
                ry = 25;
                page.AddMM(10, 10, new RepString(fp_Title, LabelReporte.Text + " " + sectorEmpresarial));
                page.AddMM(170, 10, new RepDateTime(fp, DateTime.Now));
                page.AddMM(10, 20, new RepString(fp_Col, "Nombre"));
                page.AddMM(58, 20, new RepString(fp_Col, "Sector"));
                page.AddMM(75, 20, new RepString(fp_Col, "Dirección"));
                page.AddMM(110, 20, new RepString(fp_Col, "Depto/Mcpio"));
                page.AddMM(145, 20, new RepString(fp_Col, "Télefono-Ext"));
                page.AddMM(170, 20, new RepString(fp_Col, "Email"));
            }
            ry = 25 + (i * 5);
            nombreEmpresa = dt.Rows[cont]["nombre"].ToString();
            sector = dt.Rows[cont]["SectorEmpresarial_nombreSectorEmpresarial"].ToString();
            direccion = dt.Rows[cont]["direccion"].ToString();
            DptoMncpio = dt.Rows[cont]["departamento"].ToString() +"/"+dt.Rows[cont]["municipio"].ToString();
            if (nombreEmpresa.Length > 33)
                nombreEmpresa = nombreEmpresa.Substring(0, 33);
            if(sector.Length > 10)
                sector = sector.Substring(0,10);
            if (direccion.Length > 27)
                direccion = direccion.Substring(0, 27);
            if(DptoMncpio.Length > 20)
                DptoMncpio = DptoMncpio.Substring(0,20);
            page.AddMM(10, ry, new RepString(fp, nombreEmpresa)); 
            page.AddMM(58, ry, new RepString(fp, sector)); //25
            page.AddMM(75, ry, new RepString(fp, direccion)); //25
            page.AddMM(110, ry, new RepString(fp, DptoMncpio)); //25
            page.AddMM(145, ry, new RepString(fp, dt.Rows[cont]["telefono"].ToString() + "-" + dt.Rows[cont]["extensionTelefonica"].ToString())); //15
            page.AddMM(170, ry, new RepString(fp, dt.Rows[cont]["email"].ToString())); //35
            cont++;
            i++;
        }
        if (dt.Rows.Count > 0)
            RT.ResponsePDF(report, this);
        else
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Construye un tabla HTML con la información de los practicantes en practicas o no
    /// permite filtrar o no la información, verificando si el checkbox esta 
    /// marcado
    /// </summary>
    /// <param name="ProgAcad">(string) Filtro Sector empresarial</param>
    private void ConstruirReporte4(string progAca, string nitEmpresa, string estadoPractica, int idPeriodoPractica)
    {
        int cont = 0;
        string nombrePrac = "";
        string apellidoPrac = "";
        string email = "";
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxProgramaAcademico.Checked == true)
            progAca = "";
        if (CheckBoxEmpresa.Checked == true)
            nitEmpresa = "";
        DataTable dt = reporte.GenerarReporte4(progAca, nitEmpresa, estadoPractica, idPeriodoPractica);
        Literal1.Text = "<div align ='center'><table style='width:90%;'>";
        Literal1.Text += "<td><b>Empresa</b></td> <td><b>Periodo</b></td> <td><b>Programa</b></td><td><b>Nombre</b></td> <td><b>Apellido</b></td> <td><b>Fecha Ini - Fecha Cie</b></td> <td><b>Email</b></td>";
        foreach (DataRow dtr in dt.Rows)
        {
            Empresa emp = new Empresa();
            Usuario usr = new Usuario();
            usr = usr.BuscarUsuario(dt.Rows[cont]["Usuario_nombreUsuario"].ToString());
            if (usr != null)
            {
                nombrePrac = usr.ObtNombre();
                apellidoPrac = usr.ObtApellido();
                email = usr.ObtEmail();
            }
            else
            {
                nombrePrac = "N/A";
                apellidoPrac = "N/A";
                email = "N/A";
            }

            Literal1.Text += "<tr><td>" + emp.ConsEmpresaPorIdPractica(Convert.ToInt32(dt.Rows[cont]["idPractica"])) + "</td> <td>" + DropDownListPeriodoPrac.SelectedItem.Text + "</td> <td>" + dt.Rows[cont]["ProgramaAcademico_nombrePrograma"] + "</td>";
            Literal1.Text += "<td>" + nombrePrac + "</td> <td>" + apellidoPrac + "</td> <td>" + dt.Rows[cont]["fechaInicio"] + " - " + dt.Rows[cont]["fechaCierre"] + "</td>";
            Literal1.Text += "<td>" + email + "</td></tr>";
            cont++;
        }
        Literal1.Text += "</table></div>";
        if (cont == 0)
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Genera un pdf con la información de un datatable, recibe como parametro 
    /// el programa académico para filtrar la información, se usa la libreria 
    /// Report.dll, se construye la estructura del documento desde el código
    /// </summary>
    /// <param name="progAca"></param>
    /// <param name="nitEmpresa"></param>
    /// <param name="estadoPractica"></param>
    /// <param name="idPeriodoPractica"></param>
    private void Reporte4APDF(string progAca, string nitEmpresa, string estadoPractica, int idPeriodoPractica)
    {
        int cont = 0, i = 0, datosXPagina = 46, NoPagina = 1;
        string nombrePrac, apellidoPrac, email, nombreEmpresa, periodo, programa;
        GestionReportes reporte = new GestionReportes();
        if (CheckBoxProgramaAcademico.Checked == true)
            progAca = "";
        if (CheckBoxEmpresa.Checked == true)
            nitEmpresa = "";
        DataTable dt = reporte.GenerarReporte4(progAca, nitEmpresa, estadoPractica, idPeriodoPractica);
        // Obejto reporte
        Report report = new Report(new PdfFormatter());
        // Crea la primera página del PDF
        Root.Reports.Page page = new Root.Reports.Page(report);
        // propiedades de texto color y tamano
        FontDef fd = new FontDef(report, "Helvetica");
        FontProp fp = new FontPropMM(fd, 2);
        FontProp fp_Title = new FontPropMM(fd, 3);
        fp_Title.bBold = true;
        fp_Title.color = Color.Gray;
        FontProp fp_Col = new FontPropMM(fd, 2);
        fp_Col.bBold = true;
        fp_Col.color = Color.Blue;
        // propiedades de texto color y tamano
        page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
        // posición en y inicial
        int ry = 25;
        foreach (DataRow dtr in dt.Rows)
        {
            if (cont % datosXPagina == 0)
            {
                // crea una nueva página si el contador del número de datos es divisible por el numero de datos a mostrar (datosXPagina)
                if (i != 0)
                {
                    page = new Root.Reports.Page(report);
                    NoPagina++;
                    page.AddRightMM(185, 280, new RepString(fp, "Página " + NoPagina));
                }
                i = 0;
                ry = 25;
                page.AddMM(10, 10, new RepString(fp_Title, LabelReporte.Text));
                page.AddMM(10, 15, new RepString(fp, "Estado Prácticas: " + estadoPractica));
                page.AddMM(130, 15, new RepString(fp, "(dd/mm/aaa)"));
                page.AddMM(170, 10, new RepDateTime(fp, DateTime.Now));
                page.AddMM(10, 20, new RepString(fp_Col, "Empresa"));
                page.AddMM(40, 20, new RepString(fp_Col, "Periodo"));
                page.AddMM(60, 20, new RepString(fp_Col, "Programa"));
                page.AddMM(80, 20, new RepString(fp_Col, "Nombre"));
                page.AddMM(105, 20, new RepString(fp_Col, "Apellido"));
                page.AddMM(130, 20, new RepString(fp_Col, "Fecha Inicial - Cierre"));
                page.AddMM(163, 20, new RepString(fp_Col, "Email"));
            }
            ry = 25 + (i * 5);
            Empresa emp = new Empresa();
            Usuario usr = new Usuario();
            usr = usr.BuscarUsuario(dt.Rows[cont]["Usuario_nombreUsuario"].ToString());
            if (usr != null)
            {
                nombrePrac = usr.ObtNombre();
                apellidoPrac = usr.ObtApellido();
                email = usr.ObtEmail();
            }
            else
            {
                nombrePrac = "N/A";
                apellidoPrac = "N/A";
                email = "N/A";
            }
            nombreEmpresa = emp.ConsEmpresaPorIdPractica(Convert.ToInt32(dt.Rows[cont]["idPractica"]));
            periodo = DropDownListPeriodoPrac.SelectedItem.Text;
            programa = dt.Rows[cont]["ProgramaAcademico_nombrePrograma"].ToString();
            if(nombreEmpresa.Length > 20)
                nombreEmpresa = nombreEmpresa.Substring(0,20);
            if(periodo.Length > 15)
                periodo = periodo.Substring(0,15);
            if (nombrePrac.Length > 18)
                nombrePrac = nombrePrac.Substring(0, 18);
            if (apellidoPrac.Length > 18)
                apellidoPrac = apellidoPrac.Substring(0, 18);
            if (programa.Length > 15)
                programa = programa.Substring(0, 15);
            page.AddMM(10, ry, new RepString(fp, nombreEmpresa));
            page.AddMM(40, ry, new RepString(fp, periodo)); //15
            page.AddMM(60, ry, new RepString(fp, programa)); //25
            page.AddMM(80, ry, new RepString(fp, nombrePrac)); //25
            page.AddMM(105, ry, new RepString(fp, apellidoPrac)); //25
            page.AddMM(130, ry, new RepString(fp, dt.Rows[cont]["fechaInicio"].ToString() + "-" + dt.Rows[cont]["fechaCierre"].ToString())); //15
            page.AddMM(163, ry, new RepString(fp, email)); //35
            cont++;
            i++;
        }
        if (dt.Rows.Count > 0)
            RT.ResponsePDF(report, this);
        else
            Literal2.Text = "<strong>No se obtuvieron resultados</strong>";
    }

    /// <summary>
    /// Habilita los campos para filtrar la información, segun el tipo de 
    /// reporte
    /// </summary>
    /// <param name="Reporte">(int) tipo de reporte</param>
    private void Habilitar(int Reporte)
    {
        if (Reporte == 1)
        {
            DropDownListProgramaAcademico.Visible = true;
            LabelProgramaAcademico.Visible = true;
            CheckBoxProgramaAcademico.Visible = true;
            LabelReporte.Text = "Practicantes por programa académico";
        }
        if (Reporte == 2)
        {
            DropDownListEstadoConvenio.Visible = true;
            LabelEstadoConvenio.Visible = true;
            CheckBoxEstadoConvenio.Visible = true;
            LabelReporte.Text = "Convenios con empresas según su estado";
        }
        if (Reporte == 3)
        {
            DropDownListSectorEmp.Visible = true;
            LabelSectorEmp.Visible = true;
            CheckBoxSectorEmp.Visible = true;
            LabelReporte.Text = "Datos de todas las Empresas por sector empresarial";
        }
        if (Reporte == 4)
        {
            DropDownListProgramaAcademico.Visible = true;
            LabelProgramaAcademico.Visible = true;
            CheckBoxProgramaAcademico.Visible = true;
            DropDownListEmpresa.Visible = true;
            LabelEmpresa.Visible = true;
            CheckBoxEmpresa.Visible = true;
            DropDownListEstadoPrac.Visible = true;
            LabelEstadoPrac.Visible = true;
            DropDownListPeriodoPrac.Visible = true;
            LabelPeriodPrac.Visible = true;
            LabelReporte.Text = "Practicantes por empresa en un periodo dado según su estado";
        }
    }

    protected void ButtonBuscar_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["Reporte"] == "1")
            ConstruirReporte1(DropDownListProgramaAcademico.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "2")
            ConstruirReporte2(DropDownListEstadoConvenio.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "3")
            ConstruirReporte3(DropDownListSectorEmp.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "4")
            ConstruirReporte4(DropDownListProgramaAcademico.SelectedItem.Value, DropDownListEmpresa.SelectedItem.Value,
                DropDownListEstadoPrac.SelectedItem.Value, Convert.ToInt32(DropDownListPeriodoPrac.SelectedItem.Value));
    }
    protected void ButtonGenerarPDF_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["Reporte"] == "1")
            Reporte1APDF(DropDownListProgramaAcademico.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "2")
            Reporte2APDF(DropDownListEstadoConvenio.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "3")
            Reporte3APDF(DropDownListSectorEmp.SelectedItem.Value);
        if (Request.QueryString["Reporte"] == "4")
            Reporte4APDF(DropDownListProgramaAcademico.SelectedItem.Value, DropDownListEmpresa.SelectedItem.Value,
                DropDownListEstadoPrac.SelectedItem.Value, Convert.ToInt32(DropDownListPeriodoPrac.SelectedItem.Value));
    }
}
